# 类变量归类所有 通过类名调用
# 对象变量归实例对象所有 通过self调用
# @classmethod指定方法为类方法、静态方法 通过类名调用
# __privatevar 指定是私有的 默认都是共有的

class Robot:
    """表示带有名字的机器人"""
    # 定义了类变量
    population = 0

    # 初始化方法
    def __init__(self, name):
        # 定义了一个对象变量
        self.name = name
        print("initializing {}".format(self.name))
        Robot.population += 1

    # 对象方法
    def die(self):
        """我挂了"""
        Robot.population -= 1
        print("{} 挂了".format(self.name))
        if Robot.population == 0:
            print("{} 是最后一个".format(self.name))
        else:
            print("剩下{}个机器人".format(Robot.population))

    def say_hi(self):
        """问候一下"""
        print("{} say hi".format(self.name))

    # 类方法或是静态方法
    @classmethod
    def how_many(cls):
        """打印出来人口"""
        print("总人口是 {}".format(cls.population))


r1 = Robot("r1-01")
r2 = Robot("r2-02")
Robot.how_many()

r3 = Robot("r3-03")
r2.say_hi()
Robot.how_many()

r2.die()
r1.die()
Robot.how_many()
